//JPAAutomovelDAO.java
//Classe dao do Automovel para JPA
package dao;

import java.util.List;
import javax.persistence.Query;
import modelo.Automovel;

/**
 * @author Diego Heusser
 * @author Eder Schramm
 */
public class JPAAutomovelDAO extends JPADAO implements AutomovelDAO{

    @Override
    public boolean inserir(Automovel umAutomovel) {
        try {
            em.getTransaction().begin();
            em.persist(umAutomovel);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    public boolean alterar(Automovel umAutomovel) {
        try{
            em.getTransaction().begin();
            em.merge(umAutomovel);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    public boolean remover(int id) {
        try{
            em.getTransaction().begin();
            Automovel oAutomovel = em.find(Automovel.class, id);
            em.remove(oAutomovel);
            em.getTransaction().commit();
            return true;
        } catch (Exception e ) {
            return false;
        }
    }

    @Override
    public List<Automovel> listar() {
        Query consulta = em.createQuery("SELECT a FROM Automovel a");
        List<Automovel> lista = consulta.getResultList();
        return lista;   
    }

    @Override
    public List<Automovel> listarFisico() {
        throw new UnsupportedOperationException("Não é possível listar físico com JPA!");
    }

    @Override
    public List<Automovel> listar(String motorista) {
        Query consulta = em.createQuery("SELECT a FROM Automovel a WHERE a.umMotorista.nome LIKE :motorista");
        consulta.setParameter("motorista", motorista+"%");
        List<Automovel> lista = consulta.getResultList();
        return lista;
    }

    @Override
    public boolean idValido(int id) {
        Query consulta = em.createQuery("SELECT a FROM Automovel a WHERE a.id = :id");
        consulta.setParameter("id", id);
        List<Automovel> lista = consulta.getResultList();
        return lista.isEmpty();
    }

    @Override
    public boolean apagarDados() {
        try {
            for (modelo.Automovel umAutomovel : listar()) {
                em.getTransaction().begin();
                em.remove(umAutomovel);
                em.getTransaction().commit();
            }
            return true;
        } catch (Exception ex ) {
            return false;
        }
    }

    @Override
    public boolean criarTabela() throws Exception {
        throw new UnsupportedOperationException("Não é possível criar a tabela com JPA.");
    }
    
}
